package com.fast.fast.common.base.entity;

import cn.hutool.core.util.ObjUtil;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

/**
 * Entity基类
 *
 * @author lyf
 * @date 2022/01/01 00:00 周六
 **/
@EqualsAndHashCode(callSuper = true)
@Data
@Accessors(chain = true)
public class BaseEntity extends Model<BaseEntity> implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty("主键")
    @TableId(type = IdType.AUTO)
    protected Long id;

    /**
     * 乐观锁版本号
     */
    @ApiModelProperty("乐观锁版本号")
    @TableField(fill = FieldFill.INSERT)
    @Version
    protected Integer version;

    /**
     * 创建人
     */
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    protected String createBy;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    protected Date createTime;

    /**
     * 更新人
     */
    @ApiModelProperty("更新人")
    @TableField(fill = FieldFill.UPDATE)
    protected String updateBy;

    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    protected Date updateTime;

    /**
     * 页码
     */
    @ApiModelProperty("页码")
    @TableField(exist = false)
    protected Integer current;

    /**
     * 每页记录数
     */
    @ApiModelProperty("每页记录数")
    @TableField(exist = false)
    protected Integer size;

    /**
     * 获取页码
     *
     * @return
     */
    public Integer getCurrent() {
        return ObjUtil.isEmpty(current) ? 1 : current;
    }

    /**
     * 获取每页记录数
     *
     * @return
     */
    public Integer getSize() {
        return ObjUtil.isEmpty(size) ? 10 : size;
    }

}
